package com.airlines.crewassignment.service.crew;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.airlines.common.Page;
import com.airlines.crewassignment.domain.Crew;
import com.airlines.crewassignment.entity.crew.CrewInfoForAssign;

/**
 * @author xxxx
 * @date 2018年3月26日 
 * @description
 */
public interface CrewService {
	/**
	 * 查询当天的所有的机组成员基本信息，姓名，年龄，生日、国籍等
	 *
	 * @param dutyCode ,F飞行员 C乘务员 A安全员 ,如果为空查询所有
	 * @return
	 */
	List<Crew> listCrewBase(String dutyCode);
	/**
	 * 查询当天的所有的机组成员基本信息，姓名，年龄，生日、国籍等
	 *@ workcode
	 * @param dutyCode ,F飞行员 C乘务员 A安全员 ,如果为空查询所有
	 * @return
	 */
	List<Crew> listCrewBase(String dutyCode,String workcode);

	/**
	 * 从3017中查询所有机组还有tbl_user 中查询签派和机务人员信息
	 * key    如果为空，则查询为空, 姓名和拼音模糊查询
	 * @param parameters
	 * @return
	 */
	List<Crew> listStaff(Map<String,String> parameters);
	List<Crew> listStaffPcode(Map<String,String> parameters);

	/**
	 * 根据workcode从3017中查询所有机组还有tbl_user 中查询签派和机务人员信息
	 * @param workcode
	 * @return
	 */
	List<Crew>  staffInfo(String  workcode);

	/**
	 * 查询机组人员的所有维度信息，包括基本信息，授权信息、技术资质、经历时间等
	 * <p>
	 * 注意：beforeFlightDate ，endFlightDate 均为时刻，endFlightDate 为航班结束日期的23:59:59
	 *
	 * @param dutyCode
	 * @param beforeFlightDate 连线时刻
	 * @return
	 */
	List<Crew> listCrewAllInfo(String dutyCode, Date beforeFlightDate, Date endFlightDate);

	/**
	 * 查询机组人员的所有维度信息，包括基本信息，授权信息、技术资质、经历时间等
	 * 但数据量较小，主要用于前台展示
	 * 注意：beforeFlightDate ，endFlightDate 均为时刻，endFlightDate 为航班结束日期的23:59:59
	 *
	 * @param dutyCode
	 * @param beforeFlightDate
	 * @param endFlightDate
	 * @return
	 */
	List<Crew> listCrewAllInfoForVo(String dutyCode, Date beforeFlightDate, Date endFlightDate);

	/**  用于人员在位信息模块
	 * 查询机组人员的信息，包括基本信息，授权信息
	 * 主要用于前台展示
	 *
	 * @param dutyCode 人员类别
	 * @param workcode
	 * @return
	 */
	List<Crew> listCrewInfoForVo(String dutyCode,String workcode);


//	/**
//	 * 查询指定连线所包含的机组人员，包括基本信息，授权信息、技术资质、经历时间等
//	 *
//	 * @param linkLines
//	 * @return
//	 */
//	List<Crew> listCrewByLinkLine(List<LinkLine> linkLines);
	
	/**
	 * 查询某天机组人员的排版相关的主要信息
	 * @param dutyCode
	 * @param beforeFlightDate
	 * @return
	 */
	List<CrewInfoForAssign> listCrewInfoForAssign(String dutyCode, Date beforeFlightDate);
	
	/**
	 * 根据工号查询机组人员基本信息
	 * @param workcode
	 * @return
	 */
	Crew getCrewByWorkcode(String workcode);
	
	/**
	 * 手动排班和每日规则计算人员初始化
	 * @param dutyCode
	 * @param flightDate
	 * @return
	 */
	List<Crew> listCrewAllInfoForRuleCheck(String dutyCode, List<String> workcodeList ,Date flightDate );
	
	List<CrewInfoForAssign> listCrewInfoForAssignSimple(String dutyCode, Date flightDate);
	
	/**
	 * 分页查询人员列表
	 * @param moduleFlag
	 * @param workcode
	 * @param page
	 * @return
	 */
	Page listCrewInfoForVoPage(String moduleFlag, String workcode, Page page);

}